package com.file.component;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import lombok.extern.log4j.Log4j2;
/**
 * 
 * @author 墨渐生微
 *	文件操作的组件
 */
@Log4j2
public class FileUtilComponent {
	
	/**
	 * 可以将文件中已经格式化的代码还原成一行
	 * @param infile 需要格式化的文件
	 * @param outfile 格式化后的文件
	 */
	public static void formatCode(File infile, File outfile) {
		// 定义流
		FileReader in = null;
		FileWriter out = null;
		BufferedReader reader = null;
		BufferedWriter writer = null;
		try {
			// 判断文件不为null
			if (null != infile && infile.isFile()) {
				// 创建文件读入写出流
				in = new FileReader(infile);
				out = new FileWriter(outfile);
				// 创建缓冲流
				reader = new BufferedReader(in);
				writer = new BufferedWriter(out);
				// 读入文件
				String line = null;
				// 定义跳过多行的标志
				boolean hop = false;
				while (null != (line = reader.readLine())) {
					String oldLine = line.trim();
					// 删除多行注释
					if(oldLine.startsWith("/*")){
						hop = true;
					}
					if(oldLine.endsWith("*/")){
						hop = false;
					}
					if(hop){
						continue;
					}
					// 删除单行注释和空白行
					if(oldLine.startsWith("//") || oldLine.equals("") || oldLine.startsWith("*/")){
						continue;
					}
					// 将文件写出,且不换行,去除缩进的格式
					writer.write(oldLine);
				}
			} else {
				log.error("传入的格式化文件有问题...");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 刷新并关闭读入写出流
			try {
				writer.flush();
				writer.close();
				reader.close();
				log.info("格式化完毕 ......");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 删除文件:根据传入的参数,匹配文件的名字进行删除
	 * @param file 要删除的文件
	 * @param regex 名字匹配正则表达式 
	 * 	删除所有文件                          .*
	 *  删除以.class结尾的文件     .*\\.class$
	 */
	public static void deleteFile(File file,String regex){
		// 判断文件
		if (null != file) {
			// 获取文件名字
			String fileName = file.getName();
			// 匹配文件的名字
			boolean flag = fileName.matches(regex);
			if(flag){
				file.delete();
				log.info(fileName+" 文件已删除 ......");
			}
		}
	}
}
